Spatial Filter Bank Design in the Spherical Harmonic Domain¶

Christoph Hold

Input Signal in the Spherical Harmonic Domain¶

2021-11-05T12:00:35.841304 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Extract component in $+x$-direction:

Spatial Filter - Beamformer¶

2021-11-05T12:00:36.228822 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:36.602059 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:36.993502 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:37.428829 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:38.455815 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

From a Set of Beamformers to a Spatial Filterbank¶

  • Cover the full sphere with spatial filters
  • Uniform sector layout, e.g. spherical t-designs
2021-11-05T12:00:39.044268 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:39.529820 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:40.517883 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:40.813660 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Problem Formulation¶

The spatial sector weighting $w_\xi(\Omega)$ of sectors $\xi = 1, \dots, J$ shall

preserve amplitude \begin{equation}\label{eq:amp_rec} \sum_{\xi=1}^J \beta_{\mathrm{A}} w_\xi(\Omega) = 1 , \quad \forall \Omega \in \mathbb{S}^2 \quad, \end{equation} or preserve energy \begin{equation}\label{eq:en_rec} \sum_{\xi=1}^J \beta_{\mathrm{E}} w_\xi^2(\Omega) = \sum_{\xi=1}^J \left[\sqrt{\beta_{\mathrm{E}}} w_\xi(\Omega) \right]^2 = 1 , \quad \forall \Omega \in \mathbb{S}^2 \quad, \end{equation}

over all angles $\Omega=[\phi, \theta]$.

For the spatial weighting, axisymmetric beam patterns are described by their $N$ beamforming weights / modal weighting coefficients $c_n$ as \begin{equation}\label{eq:SH_axisymPattern} w(\Theta) = \sum_{n=0}^{N} \frac{2n+1}{4\pi} c_n P_n(\cos(\Theta)) \quad , \end{equation}

where the angle $\Theta = \angle (\Omega, \Omega')$ and $P_n$ the degree $n$ Legendre polynomial.

2021-11-05T12:00:41.768181 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

In SH domain, applying the spatial filter simplifies under Parseval's relation to \begin{equation} s_\xi = \mathbf{w}_{nm, \xi}^{\mathrm{H}} \mathbf{\sigma}_{nm}^{\mathrm{in}} \quad, \end{equation} with sector signal $s_\xi$ from SH signal $\mathbf{\sigma}_{nm}^{\mathrm{in}}$.

Any axisymmetric SH sector beampattern vector $\mathbf{w}_{nm}$ in sector steering direction $\Omega_\xi$ is given as \begin{equation} \label{eq:SH_pattern} \mathbf{w}_{nm} = \operatorname{diag}_N(\mathbf{c}_n) \, \mathbf{y}_n^m(\Omega_\xi)^\mathrm{H} \quad. \end{equation}

We derived the factors preserving

  • Amplitude \begin{equation}\label{eq:beta_a} \beta_{\mathrm{A}} = \bigg[\sum_{\xi=1}^J w_\xi(\Omega)\bigg]^{-1} = \frac{4\pi}{c_0 \, J} = \frac{\sqrt{4\pi}}{w_{00}\,J} \;. \end{equation}
  • Energy \begin{equation}\label{eq:beta_e} \beta_{\mathrm{E}} = \bigg[\sum_{\xi=1}^J w_\xi^2(\Omega)\bigg]^{-1} = \frac{4\pi}{\mathbf{w}_{nm}^\mathrm{H} \mathbf{w}_{nm}^{} J} \;. \end{equation}

Application¶

2021-11-05T12:00:42.409251 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Application - Impulse Response Spatial Analysis¶

RMS:  [0.251 0.221 0.22  0.31  0.219 0.219 0.259 0.218 0.327]
2021-11-05T12:00:42.846650 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Sector Analysis

RMS:  [0.523 0.282 0.279 0.278 0.279 0.276]
2021-11-05T12:00:43.312956 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:44.509833 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Filterbank¶

Analysis \begin{equation} \bf{s}_\xi = \bf{A} \, \bf{\sigma}_{nm}^{\mathrm{in}} \quad. \end{equation}

Synthesis \begin{equation}\label{eq:SFB_syn} \bf{\sigma}_{nm}^{\mathrm{out}} = \bf{B}^\mathrm{H} \, \bf{s}_\xi \quad. \end{equation}

Reconstruction - Criteria¶

  • Perfect Reconstruction \begin{equation}\label{eq:Criterion_PerfectReconstruction} \sigma_{nm}^{\mathrm{out}}(t) \overset{!}{=} \sigma_{nm}^{\mathrm{in}}(t) , \quad \forall t \quad, \end{equation}

  • Energy Reconstruction \begin{equation}\label{eq:Criterion_EnergyReconstruction} \left< \sigma_{nm}^{\mathrm{out}}(t), \sigma_{nm}^{\mathrm{out}}(t) \right> \overset{!}{=} \left< \sigma_{nm}^{\mathrm{in}}(t), \sigma_{nm}^{\mathrm{in}}(t) \right> \quad. \end{equation}

With

\begin{equation} \mathbf{w}_{nm} = \operatorname{diag}_N(\mathbf{c}_n) \, \mathbf{y}_n^m(\Omega_\xi)^\mathrm{H} \quad, \end{equation}

we can expand the analysis and synthesis matrix as

\begin{equation}\label{eq:def_A} \mathbf{A}_{\xi, nm} = \left[\operatorname{diag}_N(\mathbf{c}_n^{\mathrm{\mathrm{an}}}) \mathbf{Y}^\mathrm{H} \right]^\mathrm{H} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{an}}) \quad, \end{equation}

and \begin{equation}\label{eq:def_B} \mathbf{B}_{\xi, nm} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{syn}}) \quad. \end{equation}

Reconstruction¶

  • Perfect Reconstruction \begin{equation}\label{eq:synthesisAmp} \mathbf{\sigma}_{nm}^{\mathrm{out}}(t) = \beta_A \mathbf{B}^\mathrm{H} \mathbf{s}_\xi(t) \quad, \end{equation}

  • Energy Reconstruction \begin{equation}\label{eq:synthesisEn} \mathbf{\sigma}_{nm}^{\mathrm{out}}(t) = \sqrt{\beta_E} \mathbf{B}^\mathrm{H} \tilde{\mathbf{s}}_\xi(t) \quad, \end{equation}

where \begin{equation} \mathbf{B}_{\xi, nm} = \mathbf{Y} \operatorname{diag}_N(\mathbf{c}_n^{\mathrm{syn}}) \quad, \text{with} \quad c_n^{\mathrm{syn}} = \frac{1}{c_n^{\mathrm{an}}/c_0^{\mathrm{an}}} \end{equation}

Application¶

Create diffuse signal with shape of input signal.

  • Analyze Ambisonic signal ($N_{sph} = 3$)
  • Replace sector signals
  • Reconstruct to Ambisonic signal, preserving energy
2021-11-05T12:00:45.718947 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Sector Analysis

2021-11-05T12:00:46.044435 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
  • Replace sector signals by new independent white noise sequences
  • Apply spatial bandwith limitation
2021-11-05T12:00:46.232860 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:46.381291 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2021-11-05T12:00:46.518227 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Resynthesis to SH domain

2021-11-05T12:00:48.372562 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

References¶

Hold, C., Politis, A., Mc Cormack, L., & Pulkki, V. (2021). Spatial Filter Bank Design in the Spherical Harmonic Domain. Proceedings of European Signal Processing Conference, August, 106–110.

Hold, C., Schlecht, S. J., Politis, A., & Pulkki, V. (2021). SPATIAL FILTER BANK IN THE SPHERICAL HARMONIC DOMAIN : RECONSTRUCTION AND APPLICATION. IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA), 1(1).

In [ ]: